home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
Weubblers handler.adf
/
examples
/
DiskResource.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-12-16
|
2KB
|
96 lines
#include <resources/disk.h>
struct DiscResource *DiskResource;
struct DiscResourceUnit DiskResourceUnit;
struct MsgPort *replyport;
#asm
_AllocUnit:
move.l 4(sp),d0
movea.l _DiskResource,a6
jmp -6(a6)
_FreeUnit:
move.l 4(sp),d0
movea.l _DiskResource,a6
jmp -12(a6)
_GetUnit:
movea.l 4(sp),a1
movea.l _DiskResource,a6
jmp -18(a6)
_GiveUnit:
movea.l _DiskResource,a6
jmp -24(a6)
_GetUnitId:
move.l 4(sp),d0
movea.l _DiskResource,a6
jmp -30(a6)
public _DummyInterrupt
public _AllocUnit
public _FreeUnit
public _GetUnit
public _GiveUnit
public _GetUnitId
#endasm
Dummy()
{
#asm
_DummyInterrupt:
movem.l d0-d7/a0-a6,-(sp)
#endasm
kprintf("hallo\n");
#asm
movem.l (sp)+,d0-d7/a0-a6
rts
#endasm
}
struct MsgPort *CreatePort();
struct DiscResource *OpenResource();
extern void DummyInterrupt();
extern struct DiscResourceUnit *GetUnit();
struct DiscResourceUnit *FormerUnit;
InitDiskRes()
{
replyport=CreatePort("replyport",0);
DiskResourceUnit.dru_Message.mn_Node.ln_Type=NT_MESSAGE;
DiskResourceUnit.dru_Message.mn_ReplyPort=replyport;
DiskResourceUnit.dru_DiscBlock.is_Code=DummyInterrupt;
DiskResourceUnit.dru_DiscSync.is_Code=DummyInterrupt;
DiskResourceUnit.dru_Index.is_Code=DummyInterrupt;
DiskResource=OpenResource(DISKNAME,0);
}
FinishDiskRes()
{
if (replyport) DeletePort(replyport);
}
GiveMeTheDisks()
{
do
{
FormerUnit=GetUnit(&DiskResourceUnit);
if (FormerUnit==0)
{WaitPort(replyport);
GetMsg(replyport);}
}
while (FormerUnit==0);
}
GiveBackTheDisks()
{
Disable();
GiveUnit();
Enable();
}